﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0035)http://fins.javaeye.com/blog/215063 -->
<HTML dir=ltr xml:lang="zh-CN" 
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>GT-Grid 1.0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站</TITLE>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<META 
content='GT-Grid 1.0 基础教程(五) 教程说明: 这是一个告诉大家如何快速的利用GT-Grid开发列表的基础教程.以后会推出"高级教程". 查看其他教程,以及最新版本信息,请点击这里 第五章: 服务端数据的加载(下) 本章紧承前一章, 将讲解如何实现"服务端分页"的真正的列表. 该列表将是一个 "远程加载数据,并进行远程分页的只读列表". ...' 
name=description>
<META content="ajax, grid AJAX GT-Grid 1.0 基础教程(五)" name=keywords><LINK 
href="/images/favicon.ico" type=image/x-icon rel="shortcut icon"><LINK 
title=大城小胖的大城 href="/rss" type=application/rss+xml rel=alternate><LINK 
media=screen href="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/blog.css" 
type=text/css rel=stylesheet><LINK media=screen 
href="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/blue.css" type=text/css 
rel=stylesheet>
<SCRIPT src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/application.js" 
type=text/javascript></SCRIPT>
<LINK media=screen 
href="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/SyntaxHighlighter.css" 
type=text/css rel=stylesheet>
<SCRIPT src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/shCoreCommon.js" 
type=text/javascript></SCRIPT>

<SCRIPT src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/hotkey.js" 
type=text/javascript></SCRIPT>

<STYLE>DIV#main {
	BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; WIDTH: 740px; PADDING-TOP: 0px; BACKGROUND-COLOR: transparent; BORDER-RIGHT-WIDTH: 0px
}
</STYLE>

<META content="MSHTML 6.00.2900.3603" name=GENERATOR></HEAD>
<BODY>
<DIV id=header>
<DIV id=blog_site_nav><A class=homepage href="http://www.javaeye.com/">首页</A> <A 
href="http://www.javaeye.com/news">新闻</A> <A 
href="http://www.javaeye.com/forums">论坛</A> <A 
href="http://www.javaeye.com/blogs">博客</A> <A 
href="http://www.javaeye.com/job">招聘</A> <A id=msna onclick="return false;" 
href="http://fins.javaeye.com/blog/215063#"><U>更多</U> <SMALL>▼</SMALL></A> 
<DIV class=quick_menu style="DISPLAY: none"><A 
href="http://www.javaeye.com/ask">问答</A> <A 
href="http://www.javaeye.com/wiki">知识库</A> <A 
href="http://www.javaeye.com/groups">圈子</A> <A 
href="http://www.javaeye.com/search">搜索</A> </DIV></DIV>
<DIV id=user_nav><A class=welcome title=查看我的博客首页 
href="http://ndot.javaeye.com/">欢迎NDot</A> <A title=你有新的站内短信 
href="http://app.javaeye.com/messages"><IMG alt=Newpm 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/newpm.gif">收件箱(2)</A> <A 
title=我的应用首页 href="http://app.javaeye.com/">我的应用</A> 
<DIV class=quick_menu style="DISPLAY: none"><A title=我订阅的好友动态消息 
href="http://app.javaeye.com/feed">我的订阅</A> <A title=我参与的话题更新的消息 
href="http://app.javaeye.com/feed/my">我的参与</A> <A title=用闲聊发表简短的话题 
href="http://app.javaeye.com/chat">我的闲聊</A> <A title=我加入的圈子最新话题 
href="http://app.javaeye.com/mygroup">我的圈子</A> <A title=我收藏的网络资源链接 
href="http://app.javaeye.com/links">我的收藏</A> <A title=我的个人简历 
href="http://app.javaeye.com/myresume">我的简历</A> </DIV><A title=管理我的博客 
href="http://ndot.javaeye.com/admin">我的博客</A> <A title=修改我的个人设置 
href="http://app.javaeye.com/profile">设置</A> <A class=nobg 
onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'put'); f.appendChild(m);f.submit();return false;" 
href="http://fins.javaeye.com/logout">退出</A> </DIV></DIV>
<DIV id=page>
<DIV class=clearfix id=branding>
<DIV id=blog_name>
<H1><A href="http://fins.javaeye.com/">大城小胖的大城</A></H1></DIV>
<DIV id=blog_preview></DIV>
<DIV id=blog_domain>永久域名 <A 
href="http://fins.javaeye.com/">http://fins.javaeye.com/</A></DIV></DIV>
<DIV class=clearfix id=content>
<DIV id=main>
<DIV class=blog_main>
<DIV id=blog_nav>
<DIV id=pre_next><A class=next title=世界上有哪些优秀的grid组件??(征集ing...) 
href="http://fins.javaeye.com/blog/215367">世界上有哪些优秀的grid组件??(征集ing... ...</A> | 
<A class=pre title="GT-Grid 1.0 基础教程(四)" 
href="http://fins.javaeye.com/blog/214680">GT-Grid 1.0 基础教程(四)</A> </DIV></DIV>
<DIV class=blog_title>
<DIV class=date><SPAN class=year>2008</SPAN><SPAN class=sep_year>-</SPAN><SPAN 
class=month>07</SPAN><SPAN class=sep_month>-</SPAN><SPAN 
class=day>15</SPAN></DIV>
<H3 class=type_original title=原创><A 
href="http://fins.javaeye.com/blog/215063">GT-Grid 1.0 
基础教程(五)</A></H3><STRONG>关键字: ajax, grid</STRONG> </DIV>
<DIV class=blog_content>GT-Grid 1.0 基础教程(五) <BR><BR><SPAN 
style="FONT-SIZE: large"><STRONG>教程说明:</STRONG></SPAN> 
<BR>这是一个告诉大家如何快速的利用GT-Grid开发列表的基础教程.以后会推出"高级教程". <BR>查看<SPAN 
style="COLOR: blue">其他教程</SPAN>,以及最新版本信息,请<A 
href="http://fins.javaeye.com/blog/214290" target=_blank>点击这里</A> 
<BR><BR><BR><SPAN style="FONT-SIZE: large"><STRONG>第五章: 
服务端数据的加载(下)</STRONG></SPAN> <BR><BR>本章紧承前一章, 将讲解如何实现"服务端分页"的真正的列表. <BR>该列表将是一个 
"远程加载数据,并进行远程分页的只读列表". <BR>(注: 本文中 "远程" 和 "服务端"往往是指一个东西.) <BR><BR>还是那句话: 
<BR>在开始之前,为了保留我们之前的成果,不至于学习的过程中把前一个成果弄坏, 我们将"mydemo4.html"另存为"mydemo5.html". 
<BR>OK,开始. <BR><BR><BR><SPAN 
style="COLOR: green">=========================================</SPAN> 
<BR><BR><BR>首先,修改代码, 把 dsConfig 中的 " remotePaging : false ," 改为true 或者删除. 
<BR>(当有url时, remotePaging默认为true ) <BR><BR><BR>也许有人会问, 上一章将的也是客户端分页, 但是并没有写 
"remotePaging : false "啊. <BR>这是因为, 当loadURL==null(默认为null)时 GT-Grid 
会强制把分页模式设置成"客户端分页",即remotePaging=false. <BR><BR>关于页面的改动 就先到这里, 下一步写服务端代码, 
我们要改写前一章里的那个 studentsList.servlet, 同时还要添加点东西.. <BR><BR><BR><SPAN 
style="COLOR: green">=========================================</SPAN> 
<BR><BR>前一章中, 我们通过"造假" 直接向客户端输出了3条数据(以json串的形式) . <BR>我们知道了 
服务端返回给客户端的数据的结构(实际上是json串的格式): <BR><PRE class=javascript name="code">
	{
		data : [
			/* 以下为具体传输的数据 */
		   { no : 1 , name :'aaa', age : 12, gender : 'M' , english : 76.5 , math :92 },
		   { no : 2 , name :'bbb', age : 11, gender : 'F' , english : 89   , math :87 },
		   { no : 3 , name :'ccc', age : 13, gender : 'F' , english : 53   , math :62 }
		]
	}


</PRE><BR><BR>如果要实现客户端分页 ,需要在返回的数据中加入 pageInfo 结点. <BR>而这个pageInfo节点下需要放入的是 
totalRowNum (还有其他,但是本例中只需放入 totalRowNum )． <BR>一个服务端分页所需要返回的json串结构如下： <BR><BR><PRE class=javascript name="code">
	{
		pageInfo : {
			totalRowNum :３
		},

		data : [
			/* 以下为具体传输的数据 */
		   { no : 1 , name :'aaa', age : 12, gender : 'M' , english : 76.5 , math :92 },
		   { no : 2 , name :'bbb', age : 11, gender : 'F' , english : 89   , math :87 },
		   { no : 3 , name :'ccc', age : 13, gender : 'F' , english : 53   , math :62 }
		]
	}


</PRE><BR><BR><BR>以上是　服务端返回给客户端的数据结构. <BR><BR><BR><SPAN 
style="COLOR: green">=========================================</SPAN> 
<BR><BR><BR>在服务端分页时　还有一些信息是需要客户端提交给服务端的． <BR>这些信息包括： "pageSize" ,"pageNum" , 
"totalRowNum" , "totalPageNum" ,"startRowNum" , "endRowNum" 
<BR>当然这些信息不一定都能用得上，　使用哪个由你的dao中负责查询的方法来决定. <BR>在本例中我只需要 startRowNum 和 pageSize 
就足够了. <BR><BR>客户端提交给服务端的信息也是一个 序列化后的json串. 这个串可以通过: <BR><PRE class=java name="code">	String gtJson = request.getParameter("_gt_json");
</PRE><BR>来取得.如果你使用的框架是那种屏蔽了 request 的框架, 请你自行查找一下能够间接从request中取数据的方法. 
<BR>有些框架会把 request.parameter 区的数据放入 javabean内,有的框架会将request转换成一个map. <BR>总之 
方法总是有的,但是在这里恕我不能把所有框架中的做法一一列出. 我只写出最本质的东西,供大家参考. <BR><BR>这个 
"叫_gt_json"的json串的格式如下: <BR><BR><PRE class=javascript name="code">{
	action	 : 'load',	// 执行的操作.显示列表属于 load 操作,所以传入的action为load, 保存数据时提交的action为save.
	pageInfo : {
		pageSize	: 20 ,  // 每页显示条数. 这个值决定于 你创建grid时的设置.
		totalRowNum	: 0  ,	// 总记录数. 这个值在第一次载入列表时 为 0 ,以后是什么值 取决于服务端返回的值.
		startRowNum	: 1,	// 开始行号. 第一次载入列表或是查看列表的首页时,会传入1,(注意表示"开始行号"的数字是从1开始.
		endRowNum	: (startRowNum+pageSize)  // 结束行号.这个值会在客户端计算好之后发给服务端.
	}
}
</PRE><BR>(其实还有其它数据,但是目前不讲那么多,知道这些已经足够). <BR>知道了"_gt_json串"的格式, 下一步我们要做的就是 
利用第三方工具, 把这个json结构的数据 转换成java对象.然后从这个对象中取得相应的值. 
<BR>同时,建议将这个工作封装成一个公共方法,在整个系统中使用. <BR><BR>理由和前面类似 由于不同系统使用的框架和json转换工具库不同, 
所以在这里我同样不能列出例子来. <BR>大家可以看我提供的"与后台结合的完整示例" ,以其作为参考. <BR><BR><BR><SPAN 
style="COLOR: green">=========================================</SPAN> 
<BR><BR><BR>上一章 以及本章前半部分着重讲了两点: <BR>1 服务端返回给客户端的数据结构,以及如何生成和发送这些数据给客户端 <BR>2 
客户端提交给服务端的数据结构, 以及服务端怎么取得这些数据. <BR><BR><BR>现在我们要把这些贯穿起来, 进一步完善上一章的例子, 
使其成为真正的"远程加载数据,并进行远程分页的只读列表". 
<BR><BR><BR>我们选择的方式依然是继续"造假"(因为我实在不想在这个期间就引入数据库相关的东西(这样会使教程变得复杂 凌乱), 
<BR>而且我相信大家只要理解了原理 从"造假"变成"玩真的"是很简单的事情. <BR>但是这次"造假"层次要高一些, 我们要造假的DAO , 还有假的map. 
<BR><BR>来 让我们先造DAO , DAO里有两个方法: <BR><PRE class=java name="code">int countStudents() : 模拟查询总数的操作. (这个操作几乎所有的分页查询都是需要的).
List getStudentsByPage(int startRowNum , int pageSize) : 模拟查询操作. 返回的是一个map构成的list, 每个map对应一条记录.

getStudentsByPage的参数为 分页查询的必要条件, startRowNum 开始行行号, pageSize 每页大小 (也就是每次要查出多少条记录) 
根据dao的不同 有些查询需要传入的参数可能是 startRowNum 和 endRowNum ,甚至更多参数 这个大家自己把握就好了. 本例中就是这么简单.

</PRE><BR>(方法getStudentsByPage 
如果返回的是pojo/vo/sdo/javabean的集合也是可以的,不过为了例子的简单,拿map构成的list举例子.) 
<BR><BR>下面是一个dao实现的参考.&nbsp; demo.grid.dao.StudentsListDAO.class 
<BR>首先是一段用来mock假数据的代码 <BR><BR><PRE class=java name="code">	// mock 数据 相关的方法
	private static int total = 200;
	public static List  MOCK_DATA=new ArrayList();

	static {
		String[] genders={"U","M","F"};
		for (int i=0;i&lt;total;i++){
			Map reocrd=new HashMap();
			reocrd.put("no", new Integer(i+1));
			reocrd.put("name", "ab"+i);
			reocrd.put("gender", genders[i%3]);
			reocrd.put("english", new Integer((int)(((Math.random()+1)*100)%80+20)));
			reocrd.put("math", new Integer((int)(((Math.random()+1)*100)%70+30)));
			MOCK_DATA.add(reocrd);
		}
	}
</PRE><BR>这段代码生成200条假记录 存放到dao的静态成员 MOCK_DATA 中 . <BR>下面的两个方法上面已经说过了. 这里我们把 
MOCK_DATA 想象成一个特殊的数据库, <BR>这两个方法直接操作MOCK_DATA. <BR><BR><PRE class=java name="code">	
	public int countStudents(){
		return MOCK_DATA.size();
	}
	
	public List getStudentsByPage(int startRowNum , int pageSize){
		List pageData=new ArrayList();
		for (int i=startRowNum,len= startRowNum +pageSize;i&lt;len;i++){
			pageData.add(MOCK_DATA.get(i));
		}
		return pageData;
	}
</PRE><BR>上面的代码我就不详细说了,相信大家都看得懂. <BR><BR>有了这个DAO之后, 
之前我们创建servlet的doPost方法就要做些修改了. <BR>我们无需拼串了. 我们可以这样做: (伪代码 不能执行) <BR><PRE class=java name="code">	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 这里假设你有一个类似的工具类可以实现json串 到java对象的转换
		Map gtJsonIn = JSONUtils.string2Map( request.getParameter("_gt_json") );

		Map pageInfo = 	(Map)gtJsonIn.get("pageInfo");
		int totalRowNum= (Integer)pageInfo.get("totalRowNum").intValue();
		int startRowNum= (Integer)pageInfo.get("startRowNum").intValue();
		int pageSize= (Integer)pageInfo.get("pageSize").intValue();
		
		StudentsListDAO studentsDao=new StudentsListDAO();

		if (totalRowNum&lt;1){  //如果客户端传来的总行数小于1,则重新统计总行数.你也可以设计成总是查询,这个比较随意.
			totalRowNum= studentsDao.countStudents();
			// 查完了一定要记得 传回给客户端.
			pageInfo.put("totalRowNum" , new Integer(totalRowNum) );
		}

		// 查询学生信息
		List studentsList = studentsDao.getStudentsByPage(startRowNum,pageSize);

		// 将pageInfo 和 data 放入一个map,然后将这个map 转换成 json串 ,输出到客户端
		Map gtJsonOut=new HashMap();
		gtJsonOut.put("pageInfo",pageInfo);
		gtJsonOut.put("data",studentsList );
		String outData =  JSONUtils.map2String(gtJsonOut);

		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print(outData);
		out.flush();
		out.close();
	}  
</PRE><BR><BR>到此位置 关于 服务端查询 分页的知识就介绍完了. <BR><BR>看起来 服务端写的东西似乎很多 ,但是 只要进行适当的封装, 
<BR>你会发现其实很简单. <BR>更具体的实现 大家可参考 GT-Grid与后台结合的完整示例. <BR><BR><BR><SPAN 
style="COLOR: green">=========================================</SPAN> 
<BR><BR><BR>再次重复上一章的说明: <BR><BR>如果使用的是PHP ,那么可以将loadURL指向某个php文件,而那个文件只要可以 echo 
出这个json串就可以了. <BR><BR>在实际系统中, 开发人员要做的就是把数据库里(当然你可以从其他地方取)的查询结果 (一个 map-list 或者 
pojo-list ) <BR>转换成一个类似上例的 json串. 然后发送到客户端. <BR><BR>转换成json串的工作可以通过 
各种第三方的json库来实现. <BR>你可以到<A href="http://www.json.org/" 
target=_blank>http://www.json.org/</A> 上去寻找更多的帮助. <BR><BR><BR>注意,为了减低入门门槛, 
我在这个示例中没有引入任何其他的问题. <BR>在正常系统中, 文件编码, 文件路径等问题总是会困扰一些新手. <BR>如果你是新手, 
那么这些问题你可以参考我提供的"与后台结合的示例"中的完整代码 或者是找google帮忙. <BR>我在这里就不多说了. 
<BR><BR><BR><BR><SPAN 
style="COLOR: green">=========================================</SPAN> 
<BR><BR><BR>这章就先讲到这里 , 最后成果的截图就不奉上了 因为看起来和 前一章的一样. <BR>下一章,将讲解的内容待定. 
想好了及时跟大家说<IMG 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/icon_smile.gif">. 
<BR><BR><BR><BR><BR><BR><BR></DIV>
<DIV>
<SCRIPT type=text/javascript>
      alimama_pid="mm_11847803_1454875_3591335"; 
      alimama_titlecolor="0000FF"; 
      alimama_descolor ="000000"; 
      alimama_bgcolor="FFFFFF"; 
      alimama_bordercolor="E6E6E6"; 
      alimama_linkcolor="008000"; 
      alimama_bottomcolor="FFFFFF"; 
      alimama_anglesize="0"; 
      alimama_bgpic="0"; 
      alimama_icon="0"; 
      alimama_sizecode="14"; 
      alimama_width=468; 
      alimama_height=60; 
      alimama_type=2; 
      </SCRIPT>

<SCRIPT src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/inf.js" 
type=text/javascript>
      </SCRIPT>
</DIV>
<DIV class=blog_bottom>
<UL>
  <LI>17:24 </LI>
  <LI>浏览 (3510) </LI>
  <LI><A title="在论坛被浏览了1932 次" href="http://www.javaeye.com/topic/215063">论坛浏览 
  (1932)</A> </LI>
  <LI><A href="http://fins.javaeye.com/blog/215063#comments">评论</A> (12) </LI>
  <LI>分类: <A href="http://fins.javaeye.com/category/7343">GT-Grid</A> </LI>
  <LI>发布在 <A href="http://ecside.group.javaeye.com/">GT-Grid</A> 圈子 </LI>
  <LI><A class=favorite 
  href="http://app.javaeye.com/links?user_favorite%5Btitle%5D=GT-Grid+1.0+%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B%28%E4%BA%94%29&amp;user_favorite%5Burl%5D=http%3A%2F%2Ffins.javaeye.com%2Fblog%2F215063" 
  target=_blank>收藏</A> </LI>
  <LI class=last><A class=more href="http://www.javaeye.com/wiki/topic/215063" 
  target=_blank>相关推荐</A> </LI></UL></DIV>
<DIV class=blog_comment>
<H5>评论</H5><A id=comments name=comments></A>
<DIV id=bc877033>
<DIV class=comment_title>12 楼 <A href="http://goodspy.javaeye.com/" 
target=_blank>goodspy</A> 2009-02-13&nbsp;&nbsp; <A 
onclick="quote_comment(877033);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>找到原因了，少了个判断。。。。 <BR>for (int i = startRowNum-1, len = 
startRowNum + pageSize-1; <SPAN style="COLOR: red">i &lt; 
len&amp;&amp;i&lt;MOCK_DATA.size(); </SPAN>i++) { 
<BR>pageData.add(MOCK_DATA.get(i)); <BR>}</DIV></DIV>
<DIV id=bc877002>
<DIV class=comment_title>11 楼 <A href="http://goodspy.javaeye.com/" 
target=_blank>goodspy</A> 2009-02-13&nbsp;&nbsp; <A 
onclick="quote_comment(877002);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>GT-Grid 1.0 基础教程(五) 中，参考fins的代码，使用json.lib。 
<BR><BR>问题一：页码上数据第一条未显示，从第二条开始了。 <BR>&nbsp;&nbsp;&nbsp; 
我修改了studentsDao.getStudentsByPage()方法中的循环 <BR>&nbsp;&nbsp;&nbsp; int 
i=startRowNum改成了int i=startRowNum-1 <BR>&nbsp;&nbsp; len = startRowNum + 
pageSize改成了len = startRowNum + pageSize-1 <BR><BR>问题二：当页码数据不足每页显示条数时，报500错误 
<BR>&nbsp;&nbsp;&nbsp; 我是共有200条数据，每页显示20条，第10页正常 <BR>&nbsp;&nbsp;&nbsp; 
数据总条数改成205条数据，每页显示20条，第11页报错 <BR>&nbsp;&nbsp;&nbsp; 参照第三节代码，未看出问题所在。</DIV></DIV>
<DIV id=bc647897>
<DIV class=comment_title>10 楼 <A href="http://itlieying.javaeye.com/" 
target=_blank>itlieying</A> 2008-08-29&nbsp;&nbsp; <A 
onclick="quote_comment(647897);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>客户端 点下一页时，在利用"_gt_json"可以从从服务端 
接收来自客户端的pageNum，但当保存编辑后，怎样把参数传回给客户端？</DIV></DIV>
<DIV id=bc647833>
<DIV class=comment_title>9 楼 <A href="http://fins.javaeye.com/" 
target=_blank>fins</A> 2008-08-29&nbsp;&nbsp; <A 
onclick="quote_comment(647833);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>itlieying : <BR>你是指 客户端向服务端传 还是 服务端向客户端传</DIV></DIV>
<DIV id=bc647728>
<DIV class=comment_title>8 楼 <A href="http://itlieying.javaeye.com/" 
target=_blank>itlieying</A> 2008-08-29&nbsp;&nbsp; <A 
onclick="quote_comment(647728);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>服务器分页时，当保存数据后，怎样传递页码和页数参数？</DIV></DIV>
<DIV id=bc618958>
<DIV class=comment_title>7 楼 <A href="http://fins.javaeye.com/" 
target=_blank>fins</A> 2008-08-01&nbsp;&nbsp; <A 
onclick="quote_comment(618958);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>非常感谢 <BR><BR>这个bug 在29日版本里 应该已经没有了 
<BR>我以前修正过这个问题</DIV></DIV>
<DIV id=bc618485>
<DIV class=comment_title>6 楼 <A href="http://49271743.javaeye.com/" 
target=_blank>49271743</A> 2008-08-01&nbsp;&nbsp; <A 
onclick="quote_comment(618485);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>例子能运行了，可是在翻页到最后一页的时候 会报 500 状态错误~~ <BR><BR>异常为 索引出界 
<BR><BR>所以&nbsp; len= startRowNum +pageSize&nbsp; 应该&nbsp; 减1 <BR><BR>len= 
startRowNum +pageSize-1 <BR><BR><BR>for (int i=startRowNum,len= startRowNum 
+pageSize-1;i&lt;len;i++){&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
pageData.add(MOCK_DATA.get(i));&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; } 
<BR><BR></DIV></DIV>
<DIV id=bc602226>
<DIV class=comment_title>5 楼 <A href="http://li04133151.javaeye.com/" 
target=_blank>li04133151</A> 2008-07-16&nbsp;&nbsp; <A 
onclick="quote_comment(602226);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>如果用过滤器可以那就没问题。 <BR><BR>我以为这里强制要求用utf－8。 
<BR><BR>等我试一试</DIV></DIV>
<DIV id=bc602009>
<DIV class=comment_title>4 楼 <A href="http://fins.javaeye.com/" 
target=_blank>fins</A> 2008-07-16&nbsp;&nbsp; <A 
onclick="quote_comment(602009);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>谢谢楼上的关注 <BR>全UTF-8就是为了不出现乱码呀 <BR><BR>如果用GBK 
那么你还需要加入编码过滤器等 <BR>但是关于J2EE 乱码 相关的内容 都讨论好多年了 <BR><BR>不管你使用的是什么编码 , 总是有办法让他不乱码的 
<BR>而且知道乱码原理之后 很轻松的就可以搞定一切乱码问题 <BR><BR>如果有必要 以后我会加一章 来专门讲解: 如果使用了 GT时 出现了乱码 
应该怎么办 <BR><BR>:D <BR>再次 谢谢你的关注</DIV></DIV>
<DIV id=bc601911>
<DIV class=comment_title>3 楼 <A href="http://li04133151.javaeye.com/" 
target=_blank>li04133151</A> 2008-07-16&nbsp;&nbsp; <A 
onclick="quote_comment(601911);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>我看到在servlet和jsp中的编码使用的全是UTF－8 
而不是GBK，这样的话，对于取得页面的查询条件，会不会出现乱码？ <BR><BR>很担心这个问题&nbsp;&nbsp; 
<BR><BR>看到这个表格非常激动，敬佩fins，我自己是写不出来。 </DIV></DIV>
<DIV id=bc601780>
<DIV class=comment_title>2 楼 <A href="http://fins.javaeye.com/" 
target=_blank>fins</A> 2008-07-16&nbsp;&nbsp; <A 
onclick="quote_comment(601780);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>非常感谢 <BR>这两个错误一个是笔误 <BR><BR>一个是我目前考虑的还不够周全 
<BR>因为我这边不管服务端返回什么 我都是当json处理的 根本就不判断头信息 <BR>所以就偷懒了<IMG 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/icon_razz.gif"> 
<BR>以后应该考虑一下的 <BR><BR>非常感谢<IMG 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/icon_biggrin.gif"></DIV></DIV>
<DIV id=bc601532>
<DIV class=comment_title>1 楼 <A href="http://artkai.javaeye.com/" 
target=_blank>Artkai</A> 2008-07-15&nbsp;&nbsp; <A 
onclick="quote_comment(601532);return false;" 
href="http://fins.javaeye.com/blog/215063#">引用</A> </DIV>
<DIV class=comment_content>挑点错： <BR>1、gtJsonOut.put("data",pageInfo);&nbsp; 
==&gt; gtJsonOut.put("data",studentsList); 
<BR>2、response.setContentType("text/html; charset=UTF-8"); ==&gt; 
response.setContentType("text/json; charset=UTF-8"); 
<BR><BR>再来个建议：那个客户端传过来的参数能不能不要取这个名字啊：_gt_json，不要用下划线，我的服务器端框架不好判断，是否可以用类似这样的：gtJson？？</DIV></DIV></DIV>
<DIV class=blog_comment>
<H5>发表评论</H5>
<P style="FONT-WEIGHT: bold; MARGIN: 5px 0px">该博客是同时发布到<A 
href="http://www.javaeye.com/topic/215063">论坛</A>的，无法评论在论坛已被锁定的帖子</P></DIV></DIV>
<SCRIPT type=text/javascript>
  dp.SyntaxHighlighter.HighlightAll('code', true, true);

  fix_image_size($$('div.blog_content img'), 700);
  function quote_comment(id) {
    new Ajax.Request('/editor/quote', {
      parameters: {'id':id, 'type':'Post'},
      onSuccess:function(response){editor.bbcode_editor.textarea.insertAfterSelection(response.responseText);}
    });
  }
</SCRIPT>
</DIV>
<DIV id=local>
<DIV class=local_top></DIV>
<DIV id=blog_owner>
<DIV id=blog_owner_logo><A href="http://fins.javaeye.com/"><IMG class=logo 
title="fins的博客: 大城小胖的大城" alt=fins的博客 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/8b5d1675-cdba-3cb7-8682-1c9ba0174e40.jpg"></A></DIV>
<DIV id=blog_owner_name>fins</DIV></DIV>
<DIV id=twitter_decorate>&nbsp;</DIV>
<DIV class="twitter clearfix" id=twitter>用js操作数据库的感觉真是爽 <BR><EM><A 
href="http://fins.javaeye.com/blog/chat/42565">2009-09-03</A> 通过网页 </EM><A 
title=回复这个闲聊 
href="http://app.javaeye.com/chat?twitter%5Bbody%5D=%40fins+&amp;twitter%5Breply_to_id%5D=42565"><IMG 
alt=Reply_twitter 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/reply_twitter.gif"></A> 
<DIV class=right><A 
href="http://fins.javaeye.com/blog/chat">&gt;&gt;更多闲聊</A></DIV></DIV>
<DIV id=blog_actions>
<UL>
  <LI>浏览: 1143894 次 
  <LI>性别: <IMG title=男 alt=Icon_minigender_1 
  src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/icon_minigender_1.gif"> 

  <LI>来自: 小胖儿的大城 
  <LI><IMG src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/offline.gif"> 
  <LI><A class=profile href="http://fins.javaeye.com/blog/profile">详细资料</A> <A 
  class=guest_book href="http://fins.javaeye.com/blog/guest_book">留言簿</A> 
  <LI><A class=message title=发送站内短信 
  href="http://app.javaeye.com/messages/new?message%5Breceiver_name%5D=fins">发短消息</A> 
  <A class=subscription 
  onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;f.submit();return false;" 
  href="http://app.javaeye.com/feed?subscription%5Bsubscribed_user_name%5D=fins">订阅</A> 
  </LI></UL>
<H5>搜索本博客</H5>
<FORM action=/blog/search method=get><INPUT class=text id=query 
style="MARGIN-LEFT: 10px; WIDTH: 110px" name=query> <INPUT class=submit type=submit value=搜索> </FORM></DIV>
<DIV class=clearfix id=user_visits>
<H5>最近访客 <SPAN 
style="PADDING-LEFT: 30px; FONT-WEIGHT: normal; FONT-SIZE: 12px"><A 
href="http://fins.javaeye.com/blog/user_visits">&gt;&gt;更多访客</A></SPAN></H5>
<DIV class=user_visit>
<DIV class=logo><A href="http://ndot.javaeye.com/" target=_blank><IMG class=logo 
title="NDot的博客: NDot" alt=NDot的博客 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/user-logo-thumb.gif"></A></DIV>
<DIV class=left><A href="http://ndot.javaeye.com/" 
target=_blank>NDot</A></DIV></DIV>
<DIV class=user_visit>
<DIV class=logo><A href="http://liqiotto.javaeye.com/" target=_blank><IMG 
class=logo title="liqiotto的博客: liqiotto" alt=liqiotto的博客 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/user-logo-thumb.gif"></A></DIV>
<DIV class=left><A href="http://liqiotto.javaeye.com/" 
target=_blank>liqiotto</A></DIV></DIV>
<DIV class=user_visit>
<DIV class=logo><A href="http://lycvip.javaeye.com/" target=_blank><IMG 
class=logo title="lycvip的博客: lycvip" alt=lycvip的博客 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/user-logo-thumb.gif"></A></DIV>
<DIV class=left><A href="http://lycvip.javaeye.com/" 
target=_blank>lycvip</A></DIV></DIV>
<DIV class=user_visit>
<DIV class=logo><A href="http://wlsever.javaeye.com/" target=_blank><IMG 
class=logo title="wlsever的博客: " alt=wlsever的博客 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/user-logo-thumb.gif"></A></DIV>
<DIV class=left><A href="http://wlsever.javaeye.com/" 
target=_blank>wlsever</A></DIV></DIV></DIV>
<DIV id=blog_menu>
<H5>博客分类</H5>
<UL>
  <LI><A href="http://fins.javaeye.com/">全部博客 (368)</A> 
  <LI><A href="http://fins.javaeye.com/category/7343">GT-Grid (109)</A> 
  <LI><A href="http://fins.javaeye.com/category/7344">java &amp; ee (29)</A> 
  <LI><A href="http://fins.javaeye.com/category/7347">js &amp; ajax (51)</A> 
  <LI><A href="http://fins.javaeye.com/category/46131">AIR &amp; Flex &amp; AS 
  (8)</A> 
  <LI><A href="http://fins.javaeye.com/category/7365">oracle &amp;&amp; pl/sql 
  (1)</A> 
  <LI><A href="http://fins.javaeye.com/category/7345">game develope (4)</A> 
  <LI><A href="http://fins.javaeye.com/category/28369">五月天 (28)</A> 
  <LI><A href="http://fins.javaeye.com/category/36821">音乐分享 (10)</A> 
  <LI><A href="http://fins.javaeye.com/category/7348">胡言乱语 (117)</A> 
  <LI><A href="http://fins.javaeye.com/category/32227">写着玩儿 (0)</A> 
</LI></UL></DIV>
<DIV id=blog_album>
<H5>我的相册</H5>
<DIV class=picture_thumb style="FLOAT: none">
<DIV><SPAN class=thumb_box><A href="http://fins.javaeye.com/album"><IMG 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/3b5867a9-7cd3-30a9-a0d9-b075f25d271b-thumb.jpg"></A></SPAN></DIV><SPAN>renzhetu<BR><A 
href="http://fins.javaeye.com/album">共 151 张</A></SPAN> </DIV></DIV>
<DIV id=guest_books>
<H5>我的留言簿 <SPAN 
style="PADDING-LEFT: 20px; FONT-WEIGHT: normal; FONT-SIZE: 12px"><A 
href="http://fins.javaeye.com/blog/guest_book">&gt;&gt;更多留言</A></SPAN></H5>
<UL>
  <LI>请问下我通过传值的方式修改了表格的值如何显示在表格上<BR>-- by <A 
  href="http://fins.javaeye.com/blog/guest_book#10278">200322176</A> 
  <LI>看了你的这篇文章 主题：[求助]高并发的大数据量查询导致系统频繁宕机,咋办啊 我 ...<BR>-- by <A 
  href="http://fins.javaeye.com/blog/guest_book#8460">lzg3267373</A> 
  <LI>fins，这次五月天来上海的演唱会去看了吗？没看你写他们的文章了。。。<BR>-- by <A 
  href="http://fins.javaeye.com/blog/guest_book#7954">smalldeer</A> 
</LI></UL></DIV>
<DIV id=blog_others>
<H5>其他分类</H5>
<UL>
  <LI><A href="http://fins.javaeye.com/blog/favorite">我的收藏</A> (23) 
  <LI><A href="http://fins.javaeye.com/blog/forum">我的论坛帖子</A> (3041) 
  <LI><A href="http://fins.javaeye.com/blog/article">我的精华良好贴</A> (13) 
  <LI><A href="http://fins.javaeye.com/blog/solution">我解决的问题</A> (1) 
</LI></UL></DIV>
<DIV id=recent_groups>
<H5>最近加入圈子</H5>
<UL>
  <LI><A href="http://mars.group.javaeye.com/">火星常驻JE办事处</A> 
  <LI><A href="http://pcdiy.group.javaeye.com/">电脑DIY</A> 
  <LI><A href="http://eclipsercpforum.group.javaeye.com/">Eclipse 
  PlugIns&amp;RCP&amp;OSGI</A> 
  <LI><A href="http://javaeye-admin.group.javaeye.com/">JavaEye站务讨论</A> 
  <LI><A href="http://javaeye-water.group.javaeye.com/">JavaEye水源</A> 
</LI></UL></DIV>
<DIV id=user_links>
<H5>链接</H5>
<UL>
  <LI><A href="http://blog.sina.com.cn/musiq" target=_blank>阿信最爱★後青春期的詩</A> 
  <LI><A href="http://aprilnew.blogcn.com/index.shtml" 
  target=_blank>失散多年的牛牛姐姐</A> 
  <LI><A href="http://extjs2.javaeye.com/" target=_blank>extJS</A> 
</LI></UL></DIV>
<DIV id=month_blogs>
<H5>存档</H5>
<UL>
  <LI><A href="http://fins.javaeye.com/blog/monthblog/2009-05">2009-05</A> (1) 
  <LI><A href="http://fins.javaeye.com/blog/monthblog/2009-04">2009-04</A> (8) 
  <LI><A href="http://fins.javaeye.com/blog/monthblog/2009-03">2009-03</A> (9) 
  <LI><A href="http://fins.javaeye.com/blog/monthblog_more">更多存档...</A> 
</LI></UL></DIV>
<DIV id=recent_comments>
<H5>最新评论</H5>
<UL>
  <LI><A title=我有一个梦 
  href="http://fins.javaeye.com/blog/214336#comments">我有一个梦</A><BR>我们大家正在努力，真的在努力！<BR>-- 
  by <A href="http://aylishuai626.javaeye.com/" target=_blank>aylishuai626</A> 
  <LI><A title='回答一下"为什么最近GT-Grid 不更新了?"' 
  href="http://fins.javaeye.com/blog/346392#comments">回答一下"为什么最近GT-G 
  ...</A><BR>我们的项目现在正在用。用的是1.0的版本。用起来很好，但是也发现了很多问题。最 ...<BR>-- by <A 
  href="http://seanman.javaeye.com/" target=_blank>Seanman</A> 
  <LI><A title="ECSide 综合讨论 :) " 
  href="http://fins.javaeye.com/blog/48723#comments">ECSide 综合讨论 :) 
  </A><BR>兄弟,能不能给一个页面有多个&lt;ec:table/&gt;的例子,我做的那个怎 ...<BR>-- by <A 
  href="http://haray.javaeye.com/" target=_blank>haray</A> 
  <LI><A title="GT-Grid 近期将会发布一个bug修正版本,然后将会进行较大的重构" 
  href="http://fins.javaeye.com/blog/265276#comments">GT-Grid 近期将会发布一个 
  ...</A><BR>与- Sigma Grid 2.2 有很大相似？<BR>-- by <A 
  href="http://wangchunfei.javaeye.com/" target=_blank>wangchunfei</A> 
  <LI><A title='★汇总★GT-Grid "缺陷,、bug、计划"汇总.(2009-02-17更新)' 
  href="http://fins.javaeye.com/blog/218435#comments">★汇总★GT-Grid "缺陷, 
  ...</A><BR>关于过滤的startwith，endwith与&gt;=,&lt;=功能上是否有重 ...<BR>-- by <A 
  href="http://qin686-163-com.javaeye.com/" target=_blank>唯快不破</A> 
</LI></UL></DIV>
<DIV id=comments_top>
<H5>评论排行榜</H5>
<UL>
  <LI><A title='[发布]GT-Grid 1.25 版 ★&amp; "前后台结合示例" ★2008-10-21 更新' 
  href="http://fins.javaeye.com/blog/255954">[发布]GT-Grid 1.25 版 ★&amp; "前后台结合 
  ...</A> 
  <LI><A title="关于 <李刚 和 他的技术书籍们> " 
  href="http://fins.javaeye.com/blog/271137">关于 &lt;李刚 和 他的技术书籍们&gt; </A>
  <LI><A title=[问]sun如果真的被IBM收购了,那么JavaFX的明天会更好?还是将没有明天了? 
  href="http://fins.javaeye.com/blog/275846">[问]sun如果真的被IBM收购了,那么JavaFX ...</A> 
  <LI><A title="[部分转载+简单评论]<IE 到底要怎么样才能得到那部分人的认可？>" 
  href="http://fins.javaeye.com/blog/240555">[部分转载+简单评论]&lt;IE 到底要怎么样才 ...</A> 
  <LI><A title=说说自己喜欢的漫画吧 
  href="http://fins.javaeye.com/blog/246412">说说自己喜欢的漫画吧</A> </LI></UL></DIV>
<DIV id=rss>
<UL>
  <LI><A href="http://fins.javaeye.com/rss" target=_blank><IMG alt=Rss 
  src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/rss.png"></A> 
  <LI><A href="http://fusion.google.com/add?feedurl=http://fins.javaeye.com/rss" 
  target=_blank><IMG alt=Rss_google 
  src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/rss_google.gif"></A> 
  <LI><A 
  href="http://www.zhuaxia.com/add_channel.php?url=http://fins.javaeye.com/rss" 
  target=_blank><IMG alt=Rss_zhuaxia 
  src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/rss_zhuaxia.gif"></A> 
  <LI><A 
  href="http://www.xianguo.com/subscribe.php?url=http://fins.javaeye.com/rss" 
  target=_blank><IMG alt=Rss_xianguo 
  src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/rss_xianguo.jpg"></A> 
  <LI><A href="http://www.google.com/search?hl=zh-CN&amp;q=RSS">[什么是RSS?]</A> 
  </LI></UL></DIV>
<DIV class=local_bottom></DIV></DIV></DIV>
<DIV class=clearfix id=footer>
<DIV id=copyright>
<HR>
声明：JavaEye文章版权属于作者，受法律保护。没有作者书面许可不得转载。若作者同意转载，必须以超链接形式标明文章原始出处和作者。<BR>© 
2003-2009 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ] 
</DIV></DIV></DIV>
<DIV id=chat_input style="DISPLAY: none"><IFRAME id=chat_iframe marginWidth=0 
marginHeight=0 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/CAG1U7G5.htm" 
frameBorder=0 scrolling=no allowTransparency></IFRAME></DIV>
<DIV id=chat_button><A style="COLOR: black; TEXT-DECORATION: none" 
onclick="$('chat_input').show();$('chat_iframe').src='/chat/widget';return false;" 
href="http://fins.javaeye.com/blog/215063#">说点啥吧 <IMG alt=Chat 
src="GT-Grid 1_0 基础教程(五) - 大城小胖的大城 - JavaEye技术网站.files/chat.gif"></A></DIV>
<SCRIPT type=text/javascript>
  document.write("<img src='http://stat.javaeye.com/?url="+ encodeURIComponent(document.location.href) + "&referrer=" + encodeURIComponent(document.referrer) + "&logged_in=yes" + "' width='0' height='0' />");
</SCRIPT>
</BODY></HTML>
